package cn.tedu.csmall.business.rabbit;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

// 这个类是配置RabbitMQ中交换机,路由Key和队列的配置类
// 交换机和队列是实际对象,而路由key只是关系,他们都需要保存到Spring容器来管理,才能生效
@Configuration
public class RabbitConfig {
    // 需要涉及的交换机\路由Key\队列的名称都需要定义常量来声明
    public static final String ORDER_EX="order_ex";
    public static final String ORDER_ROUT="order_rout";
    public static final String ORDER_QUEUE="order_queue";

    // 声明交换机对象,保存到Spring容器
    // 根据实际需求生成交换机的数量
    @Bean
    public DirectExchange stockDirectExchange(){
        return new DirectExchange(ORDER_EX);
    }
    // 声明队列对象,保存Spring容器
    @Bean
    public Queue stockQueue(){
        return new Queue(ORDER_QUEUE);
    }

    // 声明路由key的绑定关系,路由Key不是实体对象,本质上是一种关系的记录
    // 所以要声明哪个交换机绑定了哪个队列
    @Bean
    public Binding stockBinding(){
        return BindingBuilder.bind(
                stockQueue()).to(stockDirectExchange()).with(ORDER_ROUT);
    }




}
